Micron Document
NexusPi Git Node


Displaying Raw • Download

lib/microReticulum/src/Identity.h copilot/add-rtnode-configuration-options (9529fa8a) Text, 6.84 KB

Tff7b72#Tff7b72pragma once

Tff7b72#Tff7b72include T8b949e"Log.h"
Tff7b72#Tff7b72include T8b949e"Bytes.h"
Tff7b72#Tff7b72include T8b949e"Type.h"
Tff7b72#Tff7b72include T8b949e"Cryptography/Hashes.h"
Tff7b72#Tff7b72include T8b949e"Cryptography/Ed25519.h"
Tff7b72#Tff7b72include T8b949e"Cryptography/X25519.h"
Tff7b72#Tff7b72include T8b949e"Cryptography/Token.h"

Tff7b72#Tff7b72include T8b949e<map>
Tff7b72#Tff7b72include T8b949e<string>
Tff7b72#Tff7b72include T8b949e<memory>
Tff7b72#Tff7b72include T8b949e<cassert>

Te6edf3namespace Te6edf3RNS Tb4b4b4{

Te6edf3class Te6edf3DestinationTb4b4b4;
Te6edf3class Te6edf3PacketTb4b4b4;

Te6edf3class Te6edf3Identity Tb4b4b4{

Te6edf3privateTff7b72:
Te6edf3class Te6edf3IdentityEntry Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3IdentityEntryTb4b4b4(Tffa657double Te6edf3timestampTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3packet_hashTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3public_keyTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3app_dataTb4b4b4) Tff7b72:
Te6edf3_timestampTb4b4b4(Te6edf3timestampTb4b4b4)Tb4b4b4,
Te6edf3_packet_hashTb4b4b4(Te6edf3packet_hashTb4b4b4)Tb4b4b4,
Te6edf3_public_keyTb4b4b4(Te6edf3public_keyTb4b4b4)Tb4b4b4,
Te6edf3_app_dataTb4b4b4(Te6edf3app_dataTb4b4b4)
Tb4b4b4{
Tb4b4b4}
Te6edf3publicTff7b72:
Tffa657double Te6edf3_timestamp Tff7b72= T79c0ff0Tb4b4b4;
Te6edf3Bytes Te6edf3_packet_hashTb4b4b4;
Te6edf3Bytes Te6edf3_public_keyTb4b4b4;
Te6edf3Bytes Te6edf3_app_dataTb4b4b4;
Tb4b4b4}Tb4b4b4;

Te6edf3publicTff7b72:
Tff7b72static Te6edf3stdTff7b72:Tff7b72:Te6edf3mapTff7b72<Te6edf3BytesTb4b4b4, Te6edf3IdentityEntryTff7b72> Te6edf3_known_destinationsTb4b4b4;
Tff7b72static Tffa657bool Te6edf3_saving_known_destinationsTb4b4b4;
T8b949e// CBA
Tff7b72static Tffa657uint16_t Te6edf3_known_destinations_maxsizeTb4b4b4;

Te6edf3publicTff7b72:
Te6edf3IdentityTb4b4b4(Tffa657bool Te6edf3create_keys Tff7b72= Tffa657trueTb4b4b4)Tb4b4b4;
Te6edf3IdentityTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3NoneConstructor Te6edf3noneTb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffIdentity NONE object created, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3IdentityTb4b4b4(Tff7b72const Te6edf3IdentityTff7b72& Te6edf3identityTb4b4b4) Tff7b72: Te6edf3_objectTb4b4b4(Te6edf3identityTb4b4b4.Te6edf3_objectTb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffIdentity object copy created, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3virtual Tff7b72~Te6edf3IdentityTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffIdentity object destroyed, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72inline Te6edf3IdentityTff7b72& Te6edf3operator Tff7b72= Tb4b4b4(Tff7b72const Te6edf3IdentityTff7b72& Te6edf3identityTb4b4b4) Tb4b4b4{
Te6edf3_object Tff7b72= Te6edf3identityTb4b4b4.Te6edf3_objectTb4b4b4;
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffIdentity object copy created by assignment, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tff7b72*Te6edf3thisTb4b4b4;
Tb4b4b4}
Tff7b72inline Te6edf3operator Tffa657boolTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4) Tff7b72!Tff7b72= Tffa657nullptrTb4b4b4;
Tb4b4b4}
Tff7b72inline Tffa657bool Te6edf3operator Tff7b72< Tb4b4b4(Tff7b72const Te6edf3IdentityTff7b72& Te6edf3identityTb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3identityTb4b4b4.Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3publicTff7b72:
Tffa657void Te6edf3createKeysTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e/*
:returns: The private key as *bytes*
*/
Tff7b72inline Tff7b72const Te6edf3Bytes Td2a8ffget_private_keyTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_prv_bytes Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sig_prv_bytesTb4b4b4;
Tb4b4b4}
T8b949e/*
:returns: The public key as *bytes*
*/
Tff7b72inline Tff7b72const Te6edf3Bytes Td2a8ffget_public_keyTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_pub_bytes Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sig_pub_bytesTb4b4b4;
Tb4b4b4}
Tffa657bool Td2a8ffload_private_keyTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3prv_bytesTb4b4b4)Tb4b4b4;
Tffa657void Td2a8ffload_public_keyTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3pub_bytesTb4b4b4)Tb4b4b4;
Tff7b72inline Tffa657void Td2a8ffupdate_hashesTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hash Tff7b72= Te6edf3truncated_hashTb4b4b4(Te6edf3get_public_keyTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffIdentity::update_hashes: hash: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hashTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hexhash Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hashTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4;
Tffa657bool Td2a8ffloadTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3pathTb4b4b4)Tb4b4b4;
Tffa657bool Td2a8ffto_fileTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3pathTb4b4b4)Tb4b4b4;

Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Td2a8ffget_saltTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hashTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3Bytes Td2a8ffget_contextTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72return Tb4b4b4{Te6edf3BytesTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4; Tb4b4b4}

Tff7b72const Te6edf3Bytes Td2a8ffencryptTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3plaintextTb4b4b4) Tff7b72constTb4b4b4;
Tff7b72const Te6edf3Bytes Td2a8ffdecryptTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3ciphertext_tokenTb4b4b4) Tff7b72constTb4b4b4;
Tff7b72const Te6edf3Bytes Td2a8ffsignTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3messageTb4b4b4) Tff7b72constTb4b4b4;
Tffa657bool Td2a8ffvalidateTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3signatureTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3messageTb4b4b4) Tff7b72constTb4b4b4;
T8b949e// CBA following default for reference value requires inclusiion of header
T8b949e//void prove(const Packet& packet, const Destination& destination = {Type::NONE}) const;
Tffa657void Td2a8ffproveTb4b4b4(Tff7b72const Te6edf3PacketTff7b72& Te6edf3packetTb4b4b4, Tff7b72const Te6edf3DestinationTff7b72& Te6edf3destinationTb4b4b4) Tff7b72constTb4b4b4;
Tffa657void Td2a8ffproveTb4b4b4(Tff7b72const Te6edf3PacketTff7b72& Te6edf3packetTb4b4b4) Tff7b72constTb4b4b4;

Tff7b72static Tff7b72const Te6edf3Identity Td2a8fffrom_fileTb4b4b4(Tff7b72const Tffa657charTff7b72* Te6edf3pathTb4b4b4)Tb4b4b4;
Tff7b72static Tffa657void Td2a8ffrememberTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3packet_hashTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3destination_hashTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3public_keyTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3app_data Tff7b72= Tb4b4b4{Te6edf3BytesTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72static Te6edf3Identity Td2a8ffrecallTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3destination_hashTb4b4b4)Tb4b4b4;
Tff7b72static Te6edf3Bytes Td2a8ffrecall_app_dataTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3destination_hashTb4b4b4)Tb4b4b4;
Tff7b72static Tffa657bool Td2a8ffsave_known_destinationsTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72static Tffa657void Td2a8ffload_known_destinationsTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// CBA
Tff7b72static Tffa657void Td2a8ffcull_known_destinationsTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e/*
Get a SHA-256 hash of passed data.

:param data: Data to be hashed as *bytes*.
:returns: SHA-256 hash as *bytes*
*/
Tff7b72static Tff7b72inline Tff7b72const Te6edf3Bytes Td2a8fffull_hashTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3sha256Tb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/*
Get a truncated SHA-256 hash of passed data.

:param data: Data to be hashed as *bytes*.
:returns: Truncated SHA-256 hash as *bytes*
*/
Tff7b72static Tff7b72inline Tff7b72const Te6edf3Bytes Td2a8fftruncated_hashTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4) Tb4b4b4{
T8b949e//p return Identity.full_hash(data)[:(Identity.TRUNCATED_HASHLENGTH//8)]
Tff7b72return Te6edf3full_hashTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4.Te6edf3leftTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3TRUNCATED_HASHLENGTHTff7b72/T79c0ff8Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e/*
Get a random SHA-256 hash.

:param data: Data to be hashed as *bytes*.
:returns: Truncated SHA-256 hash of random data as *bytes*
*/
Tff7b72static Tff7b72inline Tff7b72const Te6edf3Bytes Td2a8ffget_random_hashTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3truncated_hashTb4b4b4(Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3randomTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3TRUNCATED_HASHLENGTHTff7b72/T79c0ff8Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72static Tffa657bool Td2a8ffvalidate_announceTb4b4b4(Tff7b72const Te6edf3PacketTff7b72& Te6edf3packetTb4b4b4)Tb4b4b4;
Tff7b72static Tffa657void Td2a8ffpersist_dataTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72static Tffa657void Td2a8ffexit_handlerTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// getters/setters
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Td2a8ffencryptionPrivateKeyTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_prv_bytesTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Td2a8ffsigningPrivateKeyTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sig_prv_bytesTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Td2a8ffencryptionPublicKeyTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_pub_bytesTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Td2a8ffsigningPublicKeyTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sig_pub_bytesTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Td2a8ffhashTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hashTb4b4b4; Tb4b4b4}
Tff7b72inline Te6edf3stdTff7b72:Tff7b72:Te6edf3string Td2a8ffhexhashTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hexhashTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3BytesTff7b72& Td2a8ffapp_dataTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_app_dataTb4b4b4; Tb4b4b4}
Tff7b72inline Tffa657void Td2a8ffapp_dataTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3app_dataTb4b4b4) Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Te6edf3_objectTff7b72-Tff7b72>Te6edf3_app_data Tff7b72= Te6edf3app_dataTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3X25519PrivateKeyTff7b72:Tff7b72:Te6edf3Ptr Td2a8ffprvTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_prvTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3Ed25519PrivateKeyTff7b72:Tff7b72:Te6edf3Ptr Td2a8ffsig_prvTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sig_prvTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3X25519PublicKeyTff7b72:Tff7b72:Te6edf3Ptr Td2a8ffpubTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_pubTb4b4b4; Tb4b4b4}
Tff7b72inline Tff7b72const Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3Ed25519PublicKeyTff7b72:Tff7b72:Te6edf3Ptr Td2a8ffsig_pubTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4; Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sig_pubTb4b4b4; Tb4b4b4}

Tff7b72inline Te6edf3stdTff7b72:Tff7b72:Te6edf3string Td2a8fftoStringTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{ Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTb4b4b4) Tff7b72return Ta5d6ff"Ta5d6ff"Tb4b4b4; Tff7b72return Ta5d6ff"Ta5d6ff{Identity:Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hashTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff}Ta5d6ff"Tb4b4b4; Tb4b4b4}

Te6edf3privateTff7b72:
Te6edf3class Te6edf3Object Tb4b4b4{
Te6edf3publicTff7b72:
Te6edf3ObjectTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffIdentity::Data object created, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Te6edf3virtual Tff7b72~Te6edf3ObjectTb4b4b4(Tb4b4b4) Tb4b4b4{ Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffIdentity::Data object destroyed, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3thisTb4b4b4)Tb4b4b4)Tb4b4b4; Tb4b4b4}
Te6edf3privateTff7b72:

Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3X25519PrivateKeyTff7b72:Tff7b72:Te6edf3Ptr Te6edf3_prvTb4b4b4;
Te6edf3Bytes Te6edf3_prv_bytesTb4b4b4;

Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3Ed25519PrivateKeyTff7b72:Tff7b72:Te6edf3Ptr Te6edf3_sig_prvTb4b4b4;
Te6edf3Bytes Te6edf3_sig_prv_bytesTb4b4b4;

Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3X25519PublicKeyTff7b72:Tff7b72:Te6edf3Ptr Te6edf3_pubTb4b4b4;
Te6edf3Bytes Te6edf3_pub_bytesTb4b4b4;

Te6edf3CryptographyTff7b72:Tff7b72:Te6edf3Ed25519PublicKeyTff7b72:Tff7b72:Te6edf3Ptr Te6edf3_sig_pubTb4b4b4;
Te6edf3Bytes Te6edf3_sig_pub_bytesTb4b4b4;

Te6edf3Bytes Te6edf3_hashTb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3string Te6edf3_hexhashTb4b4b4;

Te6edf3Bytes Te6edf3_app_dataTb4b4b4;

Te6edf3friend Te6edf3class Te6edf3IdentityTb4b4b4;
Tb4b4b4}Tb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3shared_ptrTff7b72<Te6edf3ObjectTff7b72> Te6edf3_objectTb4b4b4;

Tb4b4b4}Tb4b4b4;

Tb4b4b4}

Served by rngit 1.4.2 - Generated in 0.05s